#!/usr/bin/env node

// 脚手架入口文件
const fs = require('fs');;
const path = require('path');
const inquirer = require('inquirer');

// 生成一个用户问题
inquirer.prompt([{
    type: 'input',
    name: 'name',
    message: '此脚手架会创建一个包含gulp工作流的静态站点项目，确定么？(y/n)'
}]).then(answers => {
    // 用户拒绝
    if (answers.name.toLowerCase() !== 'y') {
        return;
    }

    // 模板目录
    const originFiles = path.join(__dirname, 'templates');
    // 需要写入的用户目录
    const targetFiles = process.cwd();

    // 文件操作 (原目录 => 目标目录)
    copyFiles(originFiles, targetFiles);
});

const copyFiles = (origin, target) => {
    fs.readdir(origin, (err, paths) => {
        if (err) throw err;
        paths.forEach((src) => {
            // 补充每一次递归后的前缀目录名
            const _src = path.join(origin, src);
            const _target = path.join(target, src);

            // 判断每次循环的文件状态
            fs.stat(_src, (err, file) => {
                if (err) throw err;
                if (file.isFile()) {
                    // 文件进行写入操作
                   writeFile(_src, _target)
                } else {
                    // 当前为目录
                    existsDir(file, _src, _target);
                }
            });
        });
    });
}


function writeFile(src, target) {
    // 文件读写
    const readStream = fs.createReadStream(src);
    const writeStream = fs.createWriteStream(target);
    readStream.pipe(writeStream);
}

function existsDir(file, src, target) {
    if (file.isDirectory()) {
        if (!fs.existsSync(src)) {
            // 当前目录不存在，创建
            fs.mkdir(src, () => {
                copyFiles(src, target);
            })
        } else {
            // 递归拷贝目录文件
            copyFiles(src, target);
        }
    }
}
